﻿using KendoMvcUI.Core;
using KendoMvcUI.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using KendoMvcUI.Common;

namespace KendoMvcUI.UI.Grid
{
    public class ColumnSettings:ControlSettingsBase
    {
        public ColumnSettings()
        { }
        /// <summary>
        /// left, center, right.
        /// </summary>
        [PropertySetting(IsIngoreForJavaScript=true)]
        public Align? Align { get; set; }
        /// <summary>
        /// 设置列的css。多个class之间用空格分隔，如：'class1 class2' 。
        /// 表格默认的css属性是ui-ellipsis
        /// </summary>
        public string Classes { get; set; }
        /// <summary>
        /// ”/”, ”-”, and ”.”都是有效的日期分隔符。
        /// y,Y,yyyy 年YY, yy 月m,mm for monthsd,dd 日.
        /// </summary>
        public string Datefmt { get; set; }
        /// <summary>
        /// 单元格是否可编辑
        /// </summary>
        public bool? Editable { get; set; }
        /// <summary>
        /// 编辑的一系列选项。{name:’__department_id’,index:’__department_id’,
        /// width:200,editable:true,edittype:’select’,editoptions: 
        /// {dataUrl:”${ctx}/admin/deplistforstu.action”}},这个是演示动态从服务器端获取数据。
        /// </summary>
        public string Editoptions { get; set; }
        /// <summary>
        /// 编辑的规则{name:’age’,index:’age’, width:90,editable:true,editrules: 
        /// {edithidden:true,required:true,number:true,minValue:10,maxValue:100}},
        /// 设定 年龄的最大值为100，最小值为10，而且为数字类型，并且为必输字段。
        /// </summary>
        public string EditRules { get; set; }
        /// <summary>
        /// 可以编辑的类型。可选值：text, textarea, select, checkbox, 
        /// password, button, image and file.
        /// </summary>
        [PropertySetting(IsIngoreForJavaScript=true)]
        public EditType? EditType { get; set; }
        /// <summary>
        /// 列宽度是否要固定不可变
        /// </summary>
        public bool? Fixed { get; set; }
        /// <summary>
        /// 对于form进行编辑时的属性设置
        /// </summary>
        public string Formoptions { get; set; }
        /// <summary>
        /// 对某些列进行格式化的设置
        /// </summary>
        public string Formatoptions { get; set; }
        /// <summary>
        /// 对列进行格式化时设置的函数名或者类型
        /// {name:’sex’,index:’sex’, align:’center’,width:60,editable:true,edittype:’select’,editoptions: {value:’0:待定;1:男;2:女’},
        /// formatter:function(cellvalue, options, rowObject){var temp = 
        /// “<img src=’${ctx}/jquery-ui-1.7.2.custom/css/img/”if(cellvalue==1)
        /// {temp = temp +”user-white.png”;} else if(cellvalue==2)
        /// {temp = temp +”user-white-female.png”;}
        /// else {temp = temp + “user-silhouette.png”;}
        ///temp = temp + “‘ border=’0′ />”
        ///return temp;
        ///}},//返回性别的图标。
        /// </summary>
        public string Formatter { get; set; }
        /// <summary>
        /// 在初始化表格时是否要隐藏此列
        /// </summary>
        public bool? Hidden { get; set; }
        /// <summary>
        /// 定义了返回的json数据映射
        /// </summary>
        public string Jsonmap { get; set; }
        public string Index { get; set; }
        /// <summary>
        /// 当从服务器端返回的数据中没有id时，将此作为唯一rowid使用只有一个列可以做这项设置。
        /// 如果设置多于一个，那么只选取第一个，其他被忽略
        /// </summary>
        public bool? Key { get; set; }
        /// <summary>
        /// 如果colNames为空则用此值来作为列的显示名称，如果都没有设置则使用name 值
        /// </summary>
        public string Label { get; set; }
        /// <summary>
        /// 表格列的名称，所有关键字，保留字都不能作为名称使用包括subgrid, cb and rn
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 是否可以被resizable
        /// </summary>
        public bool? Resizable { get; set; }
        /// <summary>
        /// 是否可搜索
        /// </summary>
        public bool? Search { get; set; }
        /// <summary>
        /// 设置搜索参数
        /// </summary>
        public string Searchoptions { get; set; }
        /// <summary>
        /// 是否可排序
        /// </summary>
        public bool? Sortable { get; set; }
        /// <summary>
        /// 排序类型
        /// </summary>
        public string Sorttype { get; set; }
        /// <summary>
        /// 定义搜索元素的类型
        /// </summary>
        public string Stype { get; set; }
        /// <summary>
        /// 搜索数据时的url
        /// </summary>
        public string Surl { get; set; }
        /// <summary>
        /// 默认列的宽度，只能是象素值，不能是百分比
        /// </summary>
        public int? Width { get; set; }
        /// <summary>
        /// 定义当前列跟返回的xml数据之间的映射关系
        /// </summary>
        public string Xmlmap { get; set; }
        /// <summary>
        /// ‘unformat’单元格值
        /// </summary>
        public string Unformat { get; set; }
        /// <summary>
        /// 重载生成js代码
        /// </summary>
        /// <returns></returns>
        public override string ToJsSettings()
        {
            var js=base.ToJsSettings();
            if(!js.EndsWith(","))
                js+=",";
            if (Align.HasValue)
                js += "align:'{0}',".Formator(Align.Value.ToString().LowercaseFirst());
            if (EditType.HasValue)
                js += "edittype:'{0}',".Formator(EditType.Value.ToString().LowercaseFirst());

            return "{"+js+"}".TrimEnd(',');
        }
    }
}
